<?php
namespace App\Admin\Actions\Import;

use App\Actions\DepartmentFileUploadAction;
use App\Models\AdminUser;
use App\Models\Department;
use App\Models\DepartmentFile;
use App\Policies\Admin\UploadPolicy;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Form;
use Dcat\Admin\Traits\LazyWidget;
use Dcat\Admin\Contracts\LazyRenderable;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;

class ImportPDFForm extends Form implements LazyRenderable
{
    use LazyWidget;

    // 处理请求
    public function handle(array $input)
    {
        $admin_user = AdminUser::find(Admin::user()->id);
        $dwdm = $input['dwdm'];
        
        $department = Department::findByDwdm($dwdm);
        if (!$department) {
            return $this->response()->error('单位不存在');
        }
        if (!UploadPolicy::make($department, $admin_user)->can_upload()) {
            return $this->response()->error('没有权限上传');
        }

        if (!$input['file']) {
            return $this->response()->error('请上传文件');
        }
        $office_file_type = strtolower($input['office_file_type']);
        if (!in_array($office_file_type, ['pdf', 'ppt'])) {
            return $this->response()->error('文件类型错误');
        }
        # 班子名称/单位名称述职PPT.pdf，单位名称班子考核表.pdf，张三.pdf
        # 单位名称目录
        # ----行政述职PPT：以“单位全称+述职PPT”命名，如：党委组织部（党校）、党委统战部述职PPT （ppt,pdf）
        # ----行政班子考核表：以“单位全称+班子考核表”命名，如：党委组织部（党校）、党委统战部班子考核表（仅需要pdf版本）
        # ----××（人名）考核表：以“姓名”命名，如：张三（仅需要pdf版本）

        # 党建单位/党建单位名称述职PPT.pdf,党建单位名称党建工作总结.pdf
        # 党建
        # ---党建述职PPT：以“党组织全称+述职PPT”命名，如：少年班学院党总支述职PPT（ppt,pdf）
        # ---党建工作总结：以“党组织全称+党建工作总结”命名，如：少年班学院党总支党建工作总结（仅需要pdf版本）
        try {
            DepartmentFileUploadAction::make($department, $admin_user)->upload($input['file'], $office_file_type);
            return $this->response()->success('导入成功')->refresh();
        } catch (\Throwable $th) {
            Log::info($department->dwmc . "上传PDF失败".$th->getMessage());
            return $this->response()->error($th->getMessage());
        }
    }

    public function form()
    {  
        $dwdm = $this->payload['dwdm'] ? $this->payload['dwdm'] : '';
        $file_type = $this->payload['file_type'] ? $this->payload['file_type'] : '';
        $office_file_type = $this->payload['office_file_type'] ? $this->payload['office_file_type'] : ''; # pdf 或者 ppt

        if ($office_file_type) {
            if (strtolower($office_file_type) == 'pdf') {
                $this->file('file', '文件')->url(admin_route('files.upload'))->autoUpload()->autoSave(false)->accept('pdf')->maxSize(10*1024)
                ->help('只允许上传pdf文件，文件大小不超过10M，重新上传将会覆盖同名的文件。');
            } else {
                $this->file('file', '文件')->url(admin_route('files.upload'))->autoUpload()->autoSave(false)
                ->mimeTypes('application/vnd.openxmlformats-officedocument.presentationml.presentation')
                ->maxSize(150*1024)
                ->help('只允许上传pptx文件，文件大小不超过150M，重新上传将会覆盖同名的文件。');
            }
        }
        $this->hidden('dwdm')->value($dwdm);
        $this->hidden('file_type')->value($file_type);
        $this->hidden('office_file_type')->value($office_file_type);
        $this->disableResetButton();
    }
}